iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 3
1
Modern Web

師父領進門 修行在個人系列 第 25

25- javscript資料結構與演算法Day5-集合Set

  • 分享至 

  • xImage
  •  

<Day5- 集合>
從第一天到今天就是所有的循序資料結構

  • 重要的細節,我們使用物件而不是陣列來表示集合,但也可以用陣列來實作
  • 所有物件都有hasOwnProperty 方法,會返回一個表明物件是否具有特定屬性的布林值

.size方法,有3種實作方式

  1. 使用變數length 增加減少items就控制它 像之前LinkedList一樣
  2. 使用javascript Object內建的函數 Object.keys(items).length
    1. Object 的key 方法, 返回一個包含給定物件所有屬性的陣列, 意即使用這個陣列的length屬性來返回items物件的屬性個數
  3. 手動提取items物件每個去性m記錄屬性個數並返回數字
    1. 物件原型包含了額外的屬性(既有繼承自javscript Object類別的m也有屬於物件自身的)
//建立集合 ES6有set類別 自己實做一次看看
function Set(){
  let items = {}

  this.add = function(value){
    if(!this.has(value)){
      items[value] = value
      return true
    }
    return false
    
  }
  this.remove = function(value){
    if(this.has(value)){
      delete items[value]
      return true
    }
    return false
  }
  this.has = function(value){
    //先做has(value),因為會被add, remove呼叫
    //= return value in items 
    return items.hasOwnProperty(value)
  }
  this.clear = function(){
    items = {}
  }
  this.size = function(){
    return Object.keys(items).length
    // let count = 0
    // for(let prop in items){
    //   if(itmes.hasOwnProperty(prop))
    //   ++count
    // }
    // return count
  }
  this.values = function(){
    return Object.keys(items)
    // let keys = []
    // for(let key in items){
    //   keys.push(key)
    // }
    // return keys
  }
  this.union = function(otherSet){
    let unionSet = new Set()
    let values = this.values()
    for (let i=0 ; i<values.length ; i++){
      unionSet.add(values[i])
    }
    values = otherSet.values()
    for ( let i = 0; i < values.length ; i++){
      unionSet.add(values[i])
    }
    return unionSet
  }
  this.intersection = function(otherSet){
    let intersectionSet = new Set()

    let values = this.values()
    for(let i = 0 ; i< values.length ; i++){
      if(otherSet.has(values[i])){
        intersectionSet.add(values[i])
      }
    }
    return intersectionSet
  }
  this.difference = function(otherSet){

    let differenceSet = new Set()

    let values = this.values()
    for(let i = 0 ; i< values.length ; i++){
      if(!otherSet.has(values[i])){
        differenceSet.add(values[i])
      }
    }
    return differenceSet
  }
  this.subset = function(otherSet){
    if(this.size()> otherSet.size()){
      return false
    }else {
      let values = this.values()
      for(let i = 0 ; i< values.length ; i++){
        if(!otherSet.has(values[i])){
          return false
        }
      }
      return true
    }
  }
}

//使用
//集合操作


上一篇
24- javscript資料結構與演算法Day4- 鏈結串列Linked List
下一篇
26- javscript資料結構與演算法Day6-字典Map與雜湊表HashMap
系列文
師父領進門 修行在個人30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言